{"componentChunkName":"component---src-templates-post-tsx","path":"/react-proptypes.md/","result":{"data":{"markdownRemark":{"html":"<h2 id=\"proptypes\" style=\"position:relative;\"><a href=\"#proptypes\" aria-label=\"proptypes permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>PropTypes</h2>\n<p>컴포넌트에 전달된 props를 검사합니다.</p>\n<h3 id=\"1-prop-types-라이브러리-설치\" style=\"position:relative;\"><a href=\"#1-prop-types-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EC%84%A4%EC%B9%98\" aria-label=\"1 prop types 라이브러리 설치 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. prop-types 라이브러리 설치</h3>\n<p><code class=\"language-text\">React.PropTypes</code>는 원래 React 패키지에 내장 되어 있었습니다.<br>\n현재는 다른 패키지로 이동하여 따로 <code class=\"language-text\">prop-types</code> 라이브러리를 설치 해줘야 합니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">$ <span class=\"token function\">npm</span> <span class=\"token function\">install</span> prop-types</code></pre></div>\n<p><code class=\"language-text\">pakage.json</code> 파일로 들어가 다운되었는지 확인합니다.<br>\ndependencies 에 <code class=\"language-text\">prop-types</code>가 있다면 설치가 완료된 것입니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\">.....\n<span class=\"token property\">\"dependencies\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"@testing-library/jest-dom\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"^4.2.4\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"@testing-library/react\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"^9.5.0\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"@testing-library/user-event\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"^7.2.1\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"axios\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"^0.19.2\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"gh-pages\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"^2.2.0\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"prop-types\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"^15.7.2\"</span><span class=\"token punctuation\">,</span> <span class=\"token comment\">//(*)</span>\n    <span class=\"token property\">\"react\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"^16.13.1\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"react-dom\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"^16.13.1\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"react-scripts\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"3.4.1\"</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n.....</code></pre></div>\n<h3 id=\"2-import-하기\" style=\"position:relative;\"><a href=\"#2-import-%ED%95%98%EA%B8%B0\" aria-label=\"2 import 하기 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. import 하기</h3>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> PropTypes <span class=\"token keyword\">from</span> <span class=\"token string\">'prop-types'</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"3-사용하기\" style=\"position:relative;\"><a href=\"#3-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0\" aria-label=\"3 사용하기 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. 사용하기</h3>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> PropTypes <span class=\"token keyword\">from</span> <span class=\"token string\">'prop-types'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">class</span> <span class=\"token class-name\">Test</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">React<span class=\"token punctuation\">.</span>Component</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n      <span class=\"token operator\">&lt;</span>div<span class=\"token operator\">></span>\n        <span class=\"token operator\">&lt;</span>h1<span class=\"token operator\">></span>Hello<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>props<span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">}</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>h1<span class=\"token operator\">></span>\n        <span class=\"token operator\">&lt;</span>p<span class=\"token operator\">></span>age <span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>props<span class=\"token punctuation\">.</span>age<span class=\"token punctuation\">}</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>p<span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>div<span class=\"token operator\">></span>\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\nTest<span class=\"token punctuation\">.</span>propTypes <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  name<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">.</span>isRequired<span class=\"token punctuation\">,</span> <span class=\"token comment\">//name은 문자이고, 부모 컴포넌트로부터 반드시 값을 받아야한다.</span>\n  age<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>number<span class=\"token punctuation\">,</span> <span class=\"token comment\">//age는 숫자</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> Test<span class=\"token punctuation\">;</span></code></pre></div>\n<p>만약 <code class=\"language-text\">name props</code>에 숫자가 전달되거나 아무런 값도 전달 받지 못했다면, 경고문이 JavaScript 콘솔을 통해 보일 것입니다.</p>\n<span class=\"gatsby-resp-image-wrapper\" style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; \">\n      <a class=\"gatsby-resp-image-link\" href=\"/static/f69b519add50e75851540ff0e54046cd/d0c0e/error.png\" style=\"display: block\" target=\"_blank\" rel=\"noopener\">\n    <span class=\"gatsby-resp-image-background-image\" style=\"padding-bottom: 4.0540540540540535%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAABCAYAAADeko4lAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAOElEQVQI1yWKyREAIAgD7b8+5YsHUIarDI+dbDJpiHDHgN5JZ07YuzCDcyqTtcAdVKunR9Sev88Dyh1K3mFEKqwAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;\"></span>\n  <img class=\"gatsby-resp-image-image\" alt=\"error\" title=\"error\" src=\"/static/f69b519add50e75851540ff0e54046cd/fcda8/error.png\" srcset=\"/static/f69b519add50e75851540ff0e54046cd/12f09/error.png 148w,\n/static/f69b519add50e75851540ff0e54046cd/e4a3f/error.png 295w,\n/static/f69b519add50e75851540ff0e54046cd/fcda8/error.png 590w,\n/static/f69b519add50e75851540ff0e54046cd/d0c0e/error.png 715w\" sizes=\"(max-width: 590px) 100vw, 590px\" style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\" loading=\"lazy\">\n  </a>\n    </span>\n<h3 id=\"4-proptypes-공식-문서\" style=\"position:relative;\"><a href=\"#4-proptypes-%EA%B3%B5%EC%8B%9D-%EB%AC%B8%EC%84%9C\" aria-label=\"4 proptypes 공식 문서 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4. PropTypes 공식 문서</h3>\n<p><strong><a href=\"https://ko.reactjs.org/docs/typechecking-with-proptypes.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">PropTypes 공식 문서</a></strong>에 따라 다양한 Type을 검사하는 방법을 보면 아래와 같습니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> PropTypes <span class=\"token keyword\">from</span> <span class=\"token string\">'prop-types'</span><span class=\"token punctuation\">;</span>\n\nMyComponent<span class=\"token punctuation\">.</span>propTypes <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// prop가 특정 JS 형식임을 선언할 수 있습니다.</span>\n  <span class=\"token comment\">// 이것들은 기본적으로 모두 선택 사항입니다.</span>\n  optionalArray<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>array<span class=\"token punctuation\">,</span>\n  optionalBool<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>bool<span class=\"token punctuation\">,</span>\n  optionalFunc<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>func<span class=\"token punctuation\">,</span>\n  optionalNumber<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>number<span class=\"token punctuation\">,</span>\n  optionalObject<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>object<span class=\"token punctuation\">,</span>\n  optionalString<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">,</span>\n  optionalSymbol<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>symbol<span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\">// 랜더링 될 수 있는 것들은 다음과 같습니다.</span>\n  <span class=\"token comment\">// 숫자(numbers), 문자(strings), 엘리먼트(elements), 또는 이러한 타입들(types)을</span>\n  <span class=\"token comment\">// 포함하고 있는 배열(array) (혹은 배열의 fragment)</span>\n  optionalNode<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>node<span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\">// React 엘리먼트.</span>\n  optionalElement<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>element<span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\">// React 엘리먼트 타입 (ie. MyComponent)</span>\n  optionalElementType<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>elementType<span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\">// prop가 클래스의 인스턴스임을 선언할 수 있습니다.</span>\n  <span class=\"token comment\">// 이 경우 JS's instanceof 연산자를 사용합니다.</span>\n  optionalMessage<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span><span class=\"token function\">instanceOf</span><span class=\"token punctuation\">(</span>Message<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\">// 열거형(enum)으로 처리하여 prop가 특정 값들로 제한되도록 할 수 있습니다.</span>\n  optionalEnum<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span><span class=\"token function\">oneOf</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token string\">'News'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'Photos'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\">// 여러 종류중 하나의 종류가 될 수 있는 객체</span>\n  optionalUnion<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span><span class=\"token function\">oneOfType</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span>PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">,</span> PropTypes<span class=\"token punctuation\">.</span>number<span class=\"token punctuation\">,</span> PropTypes<span class=\"token punctuation\">.</span><span class=\"token function\">instanceOf</span><span class=\"token punctuation\">(</span>Message<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\">// 특정 타입의 행렬</span>\n  optionalArrayOf<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span><span class=\"token function\">arrayOf</span><span class=\"token punctuation\">(</span>PropTypes<span class=\"token punctuation\">.</span>number<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\">// 특정 타입의 프로퍼티 값들을 갖는 객체</span>\n  optionalObjectOf<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span><span class=\"token function\">objectOf</span><span class=\"token punctuation\">(</span>PropTypes<span class=\"token punctuation\">.</span>number<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\">// 특정 형태를 갖는 객체</span>\n  optionalObjectWithShape<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span><span class=\"token function\">shape</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    color<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">,</span>\n    fontSize<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>number<span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\">// An object with warnings on extra properties</span>\n  optionalObjectWithStrictShape<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span><span class=\"token function\">exact</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    name<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">,</span>\n    quantity<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>number<span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\">// 위에 있는 것 모두 `isRequired`와 연결하여 prop가 제공되지 않았을 때</span>\n  <span class=\"token comment\">// 경고가 보이도록 할 수 있습니다.</span>\n  requiredFunc<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>func<span class=\"token punctuation\">.</span>isRequired<span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\">// 모든 데이터 타입이 가능한 값</span>\n  requiredAny<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>any<span class=\"token punctuation\">.</span>isRequired<span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\">// 사용자 정의 유효성 검사기를 지정할 수도 있습니다.</span>\n  <span class=\"token comment\">// 검사 실패 시에는 에러(Error) 객체를 반환해야 합니다.</span>\n  <span class=\"token comment\">// `oneOfType`안에서는 작동하지 않으므로 `console.warn` 혹은 throw 하지 마세요.</span>\n  <span class=\"token function-variable function\">customProp</span><span class=\"token operator\">:</span> <span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">props<span class=\"token punctuation\">,</span> propName<span class=\"token punctuation\">,</span> componentName</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token regex\">/matchme/</span><span class=\"token punctuation\">.</span><span class=\"token function\">test</span><span class=\"token punctuation\">(</span>props<span class=\"token punctuation\">[</span>propName<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Error</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Invalid prop `'</span> <span class=\"token operator\">+</span> propName <span class=\"token operator\">+</span> <span class=\"token string\">'` supplied to'</span> <span class=\"token operator\">+</span> <span class=\"token string\">' `'</span> <span class=\"token operator\">+</span> componentName <span class=\"token operator\">+</span> <span class=\"token string\">'`. Validation failed.'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\">// `arrayOf` 와 `objectOf 에 사용자 정의 유효성 검사기를 적용할 수 있습니다.</span>\n  <span class=\"token comment\">// 검사 실패 시에는 에러(Error) 객체를 반환해야 합니다.</span>\n  <span class=\"token comment\">// 유효성 검사기는 배열(array) 혹은 객체의 각 키(key)에 대하여 호출될 것입니다.</span>\n  <span class=\"token comment\">// 유효성 검사기의 첫 두 개의 변수는 배열 혹은 객체 자신과 현재 아이템의 키입니다.</span>\n\n  customArrayProp<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span><span class=\"token function\">arrayOf</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">propValue<span class=\"token punctuation\">,</span> key<span class=\"token punctuation\">,</span> componentName<span class=\"token punctuation\">,</span> location<span class=\"token punctuation\">,</span> propFullName</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token regex\">/matchme/</span><span class=\"token punctuation\">.</span><span class=\"token function\">test</span><span class=\"token punctuation\">(</span>propValue<span class=\"token punctuation\">[</span>key<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Error</span><span class=\"token punctuation\">(</span>\n        <span class=\"token string\">'Invalid prop `'</span> <span class=\"token operator\">+</span> propFullName <span class=\"token operator\">+</span> <span class=\"token string\">'` supplied to'</span> <span class=\"token operator\">+</span> <span class=\"token string\">' `'</span> <span class=\"token operator\">+</span> componentName <span class=\"token operator\">+</span> <span class=\"token string\">'`. Validation failed.'</span>\n      <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<hr>\n<h4 id=\"reference\" style=\"position:relative;\"><a href=\"#reference\" aria-label=\"reference permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Reference</h4>\n<ul>\n<li><a href=\"https://velopert.com/1130\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https://velopert.com/1130</a></li>\n<li><a href=\"https://ko.reactjs.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https://ko.reactjs.org/</a></li>\n</ul>","excerpt":"PropTypes 컴포넌트에 전달된 props를 검사합니다. 1. prop-types 라이브러리 설치 는 원래 React 패키지에 내장 되어 있었습니다. 현재는 다른 패키지로 이동하여 따로  라이브러리를 설치 해줘야 합니다.  파일로 들어가 다운되었…","tableOfContents":"<ul>\n<li>\n<p><a href=\"/react-proptypes.md/#proptypes\">PropTypes</a></p>\n<ul>\n<li><a href=\"/react-proptypes.md/#1-prop-types-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EC%84%A4%EC%B9%98\">1. prop-types 라이브러리 설치</a></li>\n<li><a href=\"/react-proptypes.md/#2-import-%ED%95%98%EA%B8%B0\">2. import 하기</a></li>\n<li><a href=\"/react-proptypes.md/#3-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0\">3. 사용하기</a></li>\n<li><a href=\"/react-proptypes.md/#4-proptypes-%EA%B3%B5%EC%8B%9D-%EB%AC%B8%EC%84%9C\">4. PropTypes 공식 문서</a></li>\n</ul>\n</li>\n</ul>","fields":{"slug":"/react-proptypes.md/"},"frontmatter":{"title":"React PropTypes를 사용해 타입 검사하기","date":"Jun 03, 2019","tags":["React"],"keywords":["proptypes","react"],"update":"Jan 01, 0001"}}},"pageContext":{"slug":"/react-proptypes.md/","series":[],"lastmod":"2019-06-03"}},"staticQueryHashes":["2027115977","694178885"]}